
#include "config.hpp"

#include "atr/core/boolean.hpp"

using namespace atr::core;

TEST(Core_BooleanTest, Bool_True)
{
    using T = _bool<true>;
    EXPECT_SAME ( _true, T );
}

TEST(Core_BooleanTest, Bool_False)
{
    using T = _bool<false>;
    EXPECT_SAME ( _false, T );
}

TEST(Core_BooleanTest, Not_True)
{
    using T = _not<_true>::type;
    EXPECT_SAME ( _false, T );
}

TEST(Core_BooleanTest, Not_False)
{
    using T = _not<_false>::type;
    EXPECT_SAME ( _true, T );
}

TEST(Core_BooleanTest, Or_False)
{
    using T = _or<_false>::type;
    EXPECT_SAME ( _false, T );
}

TEST(Core_BooleanTest, Or_True)
{
    using T = _or<_true>::type;
    EXPECT_SAME ( _true, T );
}

TEST(Core_BooleanTest, Or_FalseFalse)
{
    using T = _or<_false, _false>::type;
    EXPECT_SAME ( _false, T );
}

TEST(Core_BooleanTest, Or_FalseTrue)
{
    using T = _or<_false, _true>::type;
    EXPECT_SAME ( _true, T );
}

TEST(Core_BooleanTest, And_False)
{
    using T = _and<_false>::type;
    EXPECT_SAME ( _false, T );
}

TEST(Core_BooleanTest, And_True)
{
    using T = _and<_true>::type;
    EXPECT_SAME ( _true, T );
}

TEST(Core_BooleanTest, And_FalseTrue)
{
    using T = _and<_false, _true>::type;
    EXPECT_SAME ( _false, T );
}

TEST(Core_BooleanTest, And_TrueTrue)
{
    using T = _and<_true, _true>::type;
    EXPECT_SAME ( _true, T );
}

TEST(Core_BooleanTest, Xor_TrueTrue)
{
    using T = _xor<_true, _true>::type;
    EXPECT_SAME ( _false, T );
}

TEST(Core_BooleanTest, Xor_TrueFalse)
{
    using T = _xor<_true, _false>::type;
    EXPECT_SAME ( _true, T );
}

TEST(Core_BooleanTest, Xor_FalseFalse)
{
    using T = _xor<_false, _false>::type;
    EXPECT_SAME ( _false, T );
}

TEST(Core_BooleanTest, Xor_FalseTrue)
{
    using T = _xor<_false, _true>::type;
    EXPECT_SAME ( _true, T );
}